#ifndef FACTORY_H_
#define FACTORY_H_

#include "FactoryCore.hh"

//
/**
 * \file Factory.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class Factory Factory.hh
 *
 * 한 태스크 큐를 공유하는 워커를 관리한다.
 * 
 * 펙토리에 포함된 워커들은 한 리스트에 포함된다. 그리고 최소 워커 개수를 
 * 유지하고, 최대 워커 개스를 넘지않는다.
 * 
 * run 메소드로 펙트로리를 가동시키면 최소 워커 개수만큼 생성되고, 
 * fetchTask 메소드로 작업을 할당하고, 만약 가용한 워커가 없다면, 워커를 
 * 생성하고, stop 메소드로 펙토리를 중단할 때 할당 받은 작업을 모두 처리한다.
 */
class Factory : public FactoryCore
{
public:
	/**
	 * \name Factory
	 */
	Factory(BlockingQueue* AssignedQueue);
	
	/**
	 * \name ~Factory
	 */
	~Factory();
};

#endif //FACTORY_H_